@@ -0,0 +1,14 @@ |
||
1 |
+# https://editorconfig.org |
|
2 |
+root = true |
|
3 |
+ |
|
4 |
+[*] |
|
5 |
+charset = utf-8 |
|
6 |
+indent_style = space |
|
7 |
+indent_size = 2 |
|
8 |
+end_of_line = lf |
|
9 |
+insert_final_newline = true |
|
10 |
+trim_trailing_whitespace = true |
|
11 |
+ |
|
12 |
+[*.md] |
|
13 |
+insert_final_newline = false |
|
14 |
+trim_trailing_whitespace = false |
@@ -0,0 +1,14 @@ |
||
1 |
+# just a flag |
|
2 |
+ENV = 'development' |
|
3 |
+ |
|
4 |
+# base api |
|
5 |
+APP_BASE_API = 'http://kodo.xfoto.com.cn/api' |
|
6 |
+ |
|
7 |
+# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, |
|
8 |
+# to control whether the babel-plugin-dynamic-import-node plugin is enabled. |
|
9 |
+# It only does one thing by converting all import() to require(). |
|
10 |
+# This configuration can significantly increase the speed of hot updates, |
|
11 |
+# when you have a large number of pages. |
|
12 |
+# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js |
|
13 |
+ |
|
14 |
+VUE_CLI_BABEL_TRANSPILE_MODULES = true |
@@ -0,0 +1,6 @@ |
||
1 |
+# just a flag |
|
2 |
+ENV = 'production' |
|
3 |
+ |
|
4 |
+# base api |
|
5 |
+APP_BASE_API = 'http://kodo.xfoto.com.cn/api' |
|
6 |
+ |
@@ -0,0 +1,8 @@ |
||
1 |
+NODE_ENV = production |
|
2 |
+ |
|
3 |
+# just a flag |
|
4 |
+ENV = 'staging' |
|
5 |
+ |
|
6 |
+# base api |
|
7 |
+APP_BASE_API = 'http://kodo.xfoto.com.cn/api' |
|
8 |
+ |
@@ -0,0 +1,4 @@ |
||
1 |
+build/*.js |
|
2 |
+src/assets |
|
3 |
+public |
|
4 |
+dist |
@@ -0,0 +1,198 @@ |
||
1 |
+module.exports = { |
|
2 |
+ root: true, |
|
3 |
+ parserOptions: { |
|
4 |
+ parser: 'babel-eslint', |
|
5 |
+ sourceType: 'module' |
|
6 |
+ }, |
|
7 |
+ env: { |
|
8 |
+ browser: true, |
|
9 |
+ node: true, |
|
10 |
+ es6: true, |
|
11 |
+ }, |
|
12 |
+ extends: ['plugin:vue/recommended', 'eslint:recommended'], |
|
13 |
+ |
|
14 |
+ // add your custom rules here |
|
15 |
+ //it is base on https://github.com/vuejs/eslint-config-vue |
|
16 |
+ rules: { |
|
17 |
+ "vue/max-attributes-per-line": [2, { |
|
18 |
+ "singleline": 10, |
|
19 |
+ "multiline": { |
|
20 |
+ "max": 1, |
|
21 |
+ "allowFirstLine": false |
|
22 |
+ } |
|
23 |
+ }], |
|
24 |
+ "vue/singleline-html-element-content-newline": "off", |
|
25 |
+ "vue/multiline-html-element-content-newline":"off", |
|
26 |
+ "vue/name-property-casing": ["error", "PascalCase"], |
|
27 |
+ "vue/no-v-html": "off", |
|
28 |
+ 'accessor-pairs': 2, |
|
29 |
+ 'arrow-spacing': [2, { |
|
30 |
+ 'before': true, |
|
31 |
+ 'after': true |
|
32 |
+ }], |
|
33 |
+ 'block-spacing': [2, 'always'], |
|
34 |
+ 'brace-style': [2, '1tbs', { |
|
35 |
+ 'allowSingleLine': true |
|
36 |
+ }], |
|
37 |
+ 'camelcase': [0, { |
|
38 |
+ 'properties': 'always' |
|
39 |
+ }], |
|
40 |
+ 'comma-dangle': [2, 'never'], |
|
41 |
+ 'comma-spacing': [2, { |
|
42 |
+ 'before': false, |
|
43 |
+ 'after': true |
|
44 |
+ }], |
|
45 |
+ 'comma-style': [2, 'last'], |
|
46 |
+ 'constructor-super': 2, |
|
47 |
+ 'curly': [2, 'multi-line'], |
|
48 |
+ 'dot-location': [2, 'property'], |
|
49 |
+ 'eol-last': 2, |
|
50 |
+ 'eqeqeq': ["error", "always", {"null": "ignore"}], |
|
51 |
+ 'generator-star-spacing': [2, { |
|
52 |
+ 'before': true, |
|
53 |
+ 'after': true |
|
54 |
+ }], |
|
55 |
+ 'handle-callback-err': [2, '^(err|error)$'], |
|
56 |
+ 'indent': [2, 2, { |
|
57 |
+ 'SwitchCase': 1 |
|
58 |
+ }], |
|
59 |
+ 'jsx-quotes': [2, 'prefer-single'], |
|
60 |
+ 'key-spacing': [2, { |
|
61 |
+ 'beforeColon': false, |
|
62 |
+ 'afterColon': true |
|
63 |
+ }], |
|
64 |
+ 'keyword-spacing': [2, { |
|
65 |
+ 'before': true, |
|
66 |
+ 'after': true |
|
67 |
+ }], |
|
68 |
+ 'new-cap': [2, { |
|
69 |
+ 'newIsCap': true, |
|
70 |
+ 'capIsNew': false |
|
71 |
+ }], |
|
72 |
+ 'new-parens': 2, |
|
73 |
+ 'no-array-constructor': 2, |
|
74 |
+ 'no-caller': 2, |
|
75 |
+ 'no-console': 'off', |
|
76 |
+ 'no-class-assign': 2, |
|
77 |
+ 'no-cond-assign': 2, |
|
78 |
+ 'no-const-assign': 2, |
|
79 |
+ 'no-control-regex': 0, |
|
80 |
+ 'no-delete-var': 2, |
|
81 |
+ 'no-dupe-args': 2, |
|
82 |
+ 'no-dupe-class-members': 2, |
|
83 |
+ 'no-dupe-keys': 2, |
|
84 |
+ 'no-duplicate-case': 2, |
|
85 |
+ 'no-empty-character-class': 2, |
|
86 |
+ 'no-empty-pattern': 2, |
|
87 |
+ 'no-eval': 2, |
|
88 |
+ 'no-ex-assign': 2, |
|
89 |
+ 'no-extend-native': 2, |
|
90 |
+ 'no-extra-bind': 2, |
|
91 |
+ 'no-extra-boolean-cast': 2, |
|
92 |
+ 'no-extra-parens': [2, 'functions'], |
|
93 |
+ 'no-fallthrough': 2, |
|
94 |
+ 'no-floating-decimal': 2, |
|
95 |
+ 'no-func-assign': 2, |
|
96 |
+ 'no-implied-eval': 2, |
|
97 |
+ 'no-inner-declarations': [2, 'functions'], |
|
98 |
+ 'no-invalid-regexp': 2, |
|
99 |
+ 'no-irregular-whitespace': 2, |
|
100 |
+ 'no-iterator': 2, |
|
101 |
+ 'no-label-var': 2, |
|
102 |
+ 'no-labels': [2, { |
|
103 |
+ 'allowLoop': false, |
|
104 |
+ 'allowSwitch': false |
|
105 |
+ }], |
|
106 |
+ 'no-lone-blocks': 2, |
|
107 |
+ 'no-mixed-spaces-and-tabs': 2, |
|
108 |
+ 'no-multi-spaces': 2, |
|
109 |
+ 'no-multi-str': 2, |
|
110 |
+ 'no-multiple-empty-lines': [2, { |
|
111 |
+ 'max': 1 |
|
112 |
+ }], |
|
113 |
+ 'no-native-reassign': 2, |
|
114 |
+ 'no-negated-in-lhs': 2, |
|
115 |
+ 'no-new-object': 2, |
|
116 |
+ 'no-new-require': 2, |
|
117 |
+ 'no-new-symbol': 2, |
|
118 |
+ 'no-new-wrappers': 2, |
|
119 |
+ 'no-obj-calls': 2, |
|
120 |
+ 'no-octal': 2, |
|
121 |
+ 'no-octal-escape': 2, |
|
122 |
+ 'no-path-concat': 2, |
|
123 |
+ 'no-proto': 2, |
|
124 |
+ 'no-redeclare': 2, |
|
125 |
+ 'no-regex-spaces': 2, |
|
126 |
+ 'no-return-assign': [2, 'except-parens'], |
|
127 |
+ 'no-self-assign': 2, |
|
128 |
+ 'no-self-compare': 2, |
|
129 |
+ 'no-sequences': 2, |
|
130 |
+ 'no-shadow-restricted-names': 2, |
|
131 |
+ 'no-spaced-func': 2, |
|
132 |
+ 'no-sparse-arrays': 2, |
|
133 |
+ 'no-this-before-super': 2, |
|
134 |
+ 'no-throw-literal': 2, |
|
135 |
+ 'no-trailing-spaces': 2, |
|
136 |
+ 'no-undef': 2, |
|
137 |
+ 'no-undef-init': 2, |
|
138 |
+ 'no-unexpected-multiline': 2, |
|
139 |
+ 'no-unmodified-loop-condition': 2, |
|
140 |
+ 'no-unneeded-ternary': [2, { |
|
141 |
+ 'defaultAssignment': false |
|
142 |
+ }], |
|
143 |
+ 'no-unreachable': 2, |
|
144 |
+ 'no-unsafe-finally': 2, |
|
145 |
+ 'no-unused-vars': [2, { |
|
146 |
+ 'vars': 'all', |
|
147 |
+ 'args': 'none' |
|
148 |
+ }], |
|
149 |
+ 'no-useless-call': 2, |
|
150 |
+ 'no-useless-computed-key': 2, |
|
151 |
+ 'no-useless-constructor': 2, |
|
152 |
+ 'no-useless-escape': 0, |
|
153 |
+ 'no-whitespace-before-property': 2, |
|
154 |
+ 'no-with': 2, |
|
155 |
+ 'one-var': [2, { |
|
156 |
+ 'initialized': 'never' |
|
157 |
+ }], |
|
158 |
+ 'operator-linebreak': [2, 'after', { |
|
159 |
+ 'overrides': { |
|
160 |
+ '?': 'before', |
|
161 |
+ ':': 'before' |
|
162 |
+ } |
|
163 |
+ }], |
|
164 |
+ 'padded-blocks': [2, 'never'], |
|
165 |
+ 'quotes': [2, 'single', { |
|
166 |
+ 'avoidEscape': true, |
|
167 |
+ 'allowTemplateLiterals': true |
|
168 |
+ }], |
|
169 |
+ 'semi': [2, 'never'], |
|
170 |
+ 'semi-spacing': [2, { |
|
171 |
+ 'before': false, |
|
172 |
+ 'after': true |
|
173 |
+ }], |
|
174 |
+ 'space-before-blocks': [2, 'always'], |
|
175 |
+ 'space-before-function-paren': [2, 'never'], |
|
176 |
+ 'space-in-parens': [2, 'never'], |
|
177 |
+ 'space-infix-ops': 2, |
|
178 |
+ 'space-unary-ops': [2, { |
|
179 |
+ 'words': true, |
|
180 |
+ 'nonwords': false |
|
181 |
+ }], |
|
182 |
+ 'spaced-comment': [2, 'always', { |
|
183 |
+ 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] |
|
184 |
+ }], |
|
185 |
+ 'template-curly-spacing': [2, 'never'], |
|
186 |
+ 'use-isnan': 2, |
|
187 |
+ 'valid-typeof': 2, |
|
188 |
+ 'wrap-iife': [2, 'any'], |
|
189 |
+ 'yield-star-spacing': [2, 'both'], |
|
190 |
+ 'yoda': [2, 'never'], |
|
191 |
+ 'prefer-const': 2, |
|
192 |
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, |
|
193 |
+ 'object-curly-spacing': [2, 'always', { |
|
194 |
+ objectsInObjects: false |
|
195 |
+ }], |
|
196 |
+ 'array-bracket-spacing': [2, 'never'] |
|
197 |
+ } |
|
198 |
+} |
@@ -0,0 +1,4 @@ |
||
1 |
+# These are supported funding model platforms |
|
2 |
+ |
|
3 |
+patreon: panjiachen |
|
4 |
+custom: https://panjiachen.github.io/vue-element-admin-site/donate |
@@ -0,0 +1,33 @@ |
||
1 |
+--- |
|
2 |
+name: Bug report(报告问题) |
|
3 |
+about: Create a report to help us improve |
|
4 |
+--- |
|
5 |
+<!-- |
|
6 |
+ 注意:为更好的解决你的问题,请参考模板提供完整信息,准确描述问题,信息不全的 issue 将被关闭。 |
|
7 |
+ |
|
8 |
+ Note: In order to better solve your problem, please refer to the template to provide complete information, accurately describe the problem, and the incomplete information issue will be closed. |
|
9 |
+--> |
|
10 |
+ |
|
11 |
+ |
|
12 |
+## Bug report(问题描述) |
|
13 |
+ |
|
14 |
+#### Steps to reproduce(问题复现步骤) |
|
15 |
+<!-- |
|
16 |
+1. [xxx] |
|
17 |
+2. [xxx] |
|
18 |
+3. [xxxx] |
|
19 |
+--> |
|
20 |
+ |
|
21 |
+#### Screenshot or Gif(截图或动态图) |
|
22 |
+ |
|
23 |
+ |
|
24 |
+#### Link to minimal reproduction(最小可在线还原demo) |
|
25 |
+ |
|
26 |
+<!-- |
|
27 |
+Please only use Codepen, JSFiddle, CodeSandbox or a github repo |
|
28 |
+--> |
|
29 |
+ |
|
30 |
+#### Other relevant information(格外信息) |
|
31 |
+- Your OS: |
|
32 |
+- Node.js version: |
|
33 |
+- vue-element-admin version: |
@@ -0,0 +1,7 @@ |
||
1 |
+--- |
|
2 |
+name: Feature Request(新功能建议) |
|
3 |
+about: Suggest an idea for this project |
|
4 |
+--- |
|
5 |
+ |
|
6 |
+## Feature request(新功能建议) |
|
7 |
+ |
@@ -0,0 +1,35 @@ |
||
1 |
+--- |
|
2 |
+name: Question(提问) |
|
3 |
+about: Asking questions about use |
|
4 |
+--- |
|
5 |
+ |
|
6 |
+## Question(提问) |
|
7 |
+ |
|
8 |
+<!-- |
|
9 |
+ 提问之前,请确定你已经过自己的努力,尝试解决过这个问题。 |
|
10 |
+ 若是代码相关问题,请不要只截图,请提供在线 demo,以便节约彼此的时间。 |
|
11 |
+ |
|
12 |
+ Before asking a question, please make sure that you have tried your best to solve this problem. |
|
13 |
+ If it's a code-related issue, please don't just take screenshots. Please provide an online demo to save each other's time. |
|
14 |
+--> |
|
15 |
+ |
|
16 |
+#### Steps to reproduce(问题复现步骤) |
|
17 |
+<!-- |
|
18 |
+1. [xxx] |
|
19 |
+2. [xxx] |
|
20 |
+3. [xxxx] |
|
21 |
+--> |
|
22 |
+ |
|
23 |
+#### Screenshot or Gif(截图或动态图) |
|
24 |
+ |
|
25 |
+ |
|
26 |
+#### Link to minimal reproduction(最小可在线还原demo) |
|
27 |
+ |
|
28 |
+<!-- |
|
29 |
+Please only use Codepen, JSFiddle, CodeSandbox or a github repo |
|
30 |
+--> |
|
31 |
+ |
|
32 |
+#### Other relevant information(格外信息) |
|
33 |
+- Your OS: |
|
34 |
+- Node.js version: |
|
35 |
+- vue-element-admin version: |
@@ -0,0 +1,23 @@ |
||
1 |
+.DS_Store |
|
2 |
+node_modules/ |
|
3 |
+dist/ |
|
4 |
+npm-debug.log* |
|
5 |
+yarn-debug.log* |
|
6 |
+yarn-error.log* |
|
7 |
+**/*.log |
|
8 |
+ |
|
9 |
+tests/**/coverage/ |
|
10 |
+tests/e2e/reports |
|
11 |
+selenium-debug.log |
|
12 |
+ |
|
13 |
+# Editor directories and files |
|
14 |
+.idea |
|
15 |
+.vscode |
|
16 |
+*.suo |
|
17 |
+*.ntvs* |
|
18 |
+*.njsproj |
|
19 |
+*.sln |
|
20 |
+*.local |
|
21 |
+ |
|
22 |
+package-lock.json |
|
23 |
+yarn.lock |
@@ -0,0 +1,5 @@ |
||
1 |
+language: node_js |
|
2 |
+node_js: 10 |
|
3 |
+script: npm run test |
|
4 |
+notifications: |
|
5 |
+ email: false |
@@ -0,0 +1,21 @@ |
||
1 |
+MIT License |
|
2 |
+ |
|
3 |
+Copyright (c) 2017-present PanJiaChen |
|
4 |
+ |
|
5 |
+Permission is hereby granted, free of charge, to any person obtaining a copy |
|
6 |
+of this software and associated documentation files (the "Software"), to deal |
|
7 |
+in the Software without restriction, including without limitation the rights |
|
8 |
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
9 |
+copies of the Software, and to permit persons to whom the Software is |
|
10 |
+furnished to do so, subject to the following conditions: |
|
11 |
+ |
|
12 |
+The above copyright notice and this permission notice shall be included in all |
|
13 |
+copies or substantial portions of the Software. |
|
14 |
+ |
|
15 |
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
16 |
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
17 |
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
18 |
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
19 |
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
20 |
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
21 |
+SOFTWARE. |
@@ -0,0 +1,5 @@ |
||
1 |
+module.exports = { |
|
2 |
+ presets: [ |
|
3 |
+ '@vue/app' |
|
4 |
+ ] |
|
5 |
+} |
@@ -0,0 +1,35 @@ |
||
1 |
+const { run } = require('runjs') |
|
2 |
+const chalk = require('chalk') |
|
3 |
+const config = require('../vue.config.js') |
|
4 |
+const rawArgv = process.argv.slice(2) |
|
5 |
+const args = rawArgv.join(' ') |
|
6 |
+ |
|
7 |
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) { |
|
8 |
+ const report = rawArgv.includes('--report') |
|
9 |
+ |
|
10 |
+ run(`vue-cli-service build ${args}`) |
|
11 |
+ |
|
12 |
+ const port = 9526 |
|
13 |
+ const publicPath = config.publicPath |
|
14 |
+ |
|
15 |
+ var connect = require('connect') |
|
16 |
+ var serveStatic = require('serve-static') |
|
17 |
+ const app = connect() |
|
18 |
+ |
|
19 |
+ app.use( |
|
20 |
+ publicPath, |
|
21 |
+ serveStatic('./dist', { |
|
22 |
+ index: ['index.html', '/'] |
|
23 |
+ }) |
|
24 |
+ ) |
|
25 |
+ |
|
26 |
+ app.listen(port, function () { |
|
27 |
+ console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) |
|
28 |
+ if (report) { |
|
29 |
+ console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) |
|
30 |
+ } |
|
31 |
+ |
|
32 |
+ }) |
|
33 |
+} else { |
|
34 |
+ run(`vue-cli-service build ${args}`) |
|
35 |
+} |
@@ -0,0 +1,24 @@ |
||
1 |
+module.exports = { |
|
2 |
+ moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], |
|
3 |
+ transform: { |
|
4 |
+ '^.+\\.vue$': 'vue-jest', |
|
5 |
+ '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': |
|
6 |
+ 'jest-transform-stub', |
|
7 |
+ '^.+\\.jsx?$': 'babel-jest' |
|
8 |
+ }, |
|
9 |
+ moduleNameMapper: { |
|
10 |
+ '^@/(.*)$': '<rootDir>/src/$1' |
|
11 |
+ }, |
|
12 |
+ snapshotSerializers: ['jest-serializer-vue'], |
|
13 |
+ testMatch: [ |
|
14 |
+ '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' |
|
15 |
+ ], |
|
16 |
+ collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], |
|
17 |
+ coverageDirectory: '<rootDir>/tests/unit/coverage', |
|
18 |
+ // 'collectCoverage': true, |
|
19 |
+ 'coverageReporters': [ |
|
20 |
+ 'lcov', |
|
21 |
+ 'text-summary' |
|
22 |
+ ], |
|
23 |
+ testURL: 'http://kodo.xfoto.com.cn/api' |
|
24 |
+} |
@@ -0,0 +1,9 @@ |
||
1 |
+{ |
|
2 |
+ "compilerOptions": { |
|
3 |
+ "baseUrl": "./", |
|
4 |
+ "paths": { |
|
5 |
+ "@/*": ["src/*"] |
|
6 |
+ } |
|
7 |
+ }, |
|
8 |
+ "exclude": ["node_modules", "dist"] |
|
9 |
+} |
@@ -0,0 +1,114 @@ |
||
1 |
+{ |
|
2 |
+ "name": "vue-element-admin", |
|
3 |
+ "version": "4.2.1", |
|
4 |
+ "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features", |
|
5 |
+ "author": "Pan <panfree23@gmail.com>", |
|
6 |
+ "license": "MIT", |
|
7 |
+ "scripts": { |
|
8 |
+ "dev": "vue-cli-service serve", |
|
9 |
+ "build:prod": "vue-cli-service build", |
|
10 |
+ "build:stage": "vue-cli-service build --mode staging", |
|
11 |
+ "preview": "node build/index.js --preview", |
|
12 |
+ "lint": "eslint --ext .js,.vue src", |
|
13 |
+ "test:unit": "jest --clearCache && vue-cli-service test:unit", |
|
14 |
+ "test:ci": "npm run lint && npm run test:unit", |
|
15 |
+ "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", |
|
16 |
+ "new": "plop" |
|
17 |
+ }, |
|
18 |
+ "husky": { |
|
19 |
+ "hooks": { |
|
20 |
+ "pre-commit": "lint-staged" |
|
21 |
+ } |
|
22 |
+ }, |
|
23 |
+ "lint-staged": { |
|
24 |
+ "src/**/*.{js,vue}": [ |
|
25 |
+ "eslint --fix", |
|
26 |
+ "git add" |
|
27 |
+ ] |
|
28 |
+ }, |
|
29 |
+ "keywords": [ |
|
30 |
+ "vue", |
|
31 |
+ "admin", |
|
32 |
+ "dashboard", |
|
33 |
+ "element-ui", |
|
34 |
+ "boilerplate", |
|
35 |
+ "admin-template", |
|
36 |
+ "management-system" |
|
37 |
+ ], |
|
38 |
+ "repository": { |
|
39 |
+ "type": "git", |
|
40 |
+ "url": "git+https://github.com/PanJiaChen/vue-element-admin.git" |
|
41 |
+ }, |
|
42 |
+ "bugs": { |
|
43 |
+ "url": "https://github.com/PanJiaChen/vue-element-admin/issues" |
|
44 |
+ }, |
|
45 |
+ "dependencies": { |
|
46 |
+ "axios": "0.18.1", |
|
47 |
+ "clipboard": "2.0.4", |
|
48 |
+ "codemirror": "5.45.0", |
|
49 |
+ "driver.js": "0.9.5", |
|
50 |
+ "dropzone": "5.5.1", |
|
51 |
+ "echarts": "4.2.1", |
|
52 |
+ "element-ui": "2.13.0", |
|
53 |
+ "file-saver": "2.0.1", |
|
54 |
+ "fuse.js": "3.4.4", |
|
55 |
+ "js-cookie": "2.2.0", |
|
56 |
+ "jsonlint": "1.6.3", |
|
57 |
+ "jszip": "3.2.1", |
|
58 |
+ "normalize.css": "7.0.0", |
|
59 |
+ "nprogress": "0.2.0", |
|
60 |
+ "path-to-regexp": "2.4.0", |
|
61 |
+ "qs": "^6.9.3", |
|
62 |
+ "screenfull": "4.2.0", |
|
63 |
+ "script-loader": "0.7.2", |
|
64 |
+ "showdown": "1.9.0", |
|
65 |
+ "sortablejs": "1.8.4", |
|
66 |
+ "tui-editor": "1.3.3", |
|
67 |
+ "vue": "2.6.10", |
|
68 |
+ "vue-count-to": "1.0.13", |
|
69 |
+ "vue-router": "3.0.2", |
|
70 |
+ "vue-splitpane": "1.0.4", |
|
71 |
+ "vuedraggable": "2.20.0", |
|
72 |
+ "vuex": "3.1.0", |
|
73 |
+ "xlsx": "0.14.1" |
|
74 |
+ }, |
|
75 |
+ "devDependencies": { |
|
76 |
+ "@babel/core": "7.0.0", |
|
77 |
+ "@babel/register": "7.0.0", |
|
78 |
+ "@vue/cli-plugin-babel": "3.5.3", |
|
79 |
+ "@vue/cli-plugin-eslint": "^3.9.1", |
|
80 |
+ "@vue/cli-plugin-unit-jest": "3.5.3", |
|
81 |
+ "@vue/cli-service": "3.5.3", |
|
82 |
+ "@vue/test-utils": "1.0.0-beta.29", |
|
83 |
+ "autoprefixer": "^9.5.1", |
|
84 |
+ "babel-core": "7.0.0-bridge.0", |
|
85 |
+ "babel-eslint": "10.0.1", |
|
86 |
+ "babel-jest": "23.6.0", |
|
87 |
+ "chalk": "2.4.2", |
|
88 |
+ "chokidar": "2.1.5", |
|
89 |
+ "connect": "3.6.6", |
|
90 |
+ "eslint": "5.15.3", |
|
91 |
+ "eslint-plugin-vue": "5.2.2", |
|
92 |
+ "html-webpack-plugin": "3.2.0", |
|
93 |
+ "husky": "1.3.1", |
|
94 |
+ "lint-staged": "8.1.5", |
|
95 |
+ "mockjs": "1.0.1-beta3", |
|
96 |
+ "node-sass": "^4.9.0", |
|
97 |
+ "plop": "2.3.0", |
|
98 |
+ "runjs": "^4.3.2", |
|
99 |
+ "sass-loader": "^7.1.0", |
|
100 |
+ "script-ext-html-webpack-plugin": "2.1.3", |
|
101 |
+ "serve-static": "^1.13.2", |
|
102 |
+ "svg-sprite-loader": "4.1.3", |
|
103 |
+ "svgo": "1.2.0", |
|
104 |
+ "vue-template-compiler": "2.6.10" |
|
105 |
+ }, |
|
106 |
+ "engines": { |
|
107 |
+ "node": ">=8.9", |
|
108 |
+ "npm": ">= 3.0.0" |
|
109 |
+ }, |
|
110 |
+ "browserslist": [ |
|
111 |
+ "> 1%", |
|
112 |
+ "last 2 versions" |
|
113 |
+ ] |
|
114 |
+} |
@@ -0,0 +1,26 @@ |
||
1 |
+{{#if template}} |
|
2 |
+<template> |
|
3 |
+ <div /> |
|
4 |
+</template> |
|
5 |
+{{/if}} |
|
6 |
+ |
|
7 |
+{{#if script}} |
|
8 |
+<script> |
|
9 |
+export default { |
|
10 |
+ name: '{{ properCase name }}', |
|
11 |
+ props: {}, |
|
12 |
+ data() { |
|
13 |
+ return {} |
|
14 |
+ }, |
|
15 |
+ created() {}, |
|
16 |
+ mounted() {}, |
|
17 |
+ methods: {} |
|
18 |
+} |
|
19 |
+</script> |
|
20 |
+{{/if}} |
|
21 |
+ |
|
22 |
+{{#if style}} |
|
23 |
+<style lang="scss" scoped> |
|
24 |
+ |
|
25 |
+</style> |
|
26 |
+{{/if}} |
@@ -0,0 +1,55 @@ |
||
1 |
+const { notEmpty } = require('../utils.js') |
|
2 |
+ |
|
3 |
+module.exports = { |
|
4 |
+ description: 'generate vue component', |
|
5 |
+ prompts: [{ |
|
6 |
+ type: 'input', |
|
7 |
+ name: 'name', |
|
8 |
+ message: 'component name please', |
|
9 |
+ validate: notEmpty('name') |
|
10 |
+ }, |
|
11 |
+ { |
|
12 |
+ type: 'checkbox', |
|
13 |
+ name: 'blocks', |
|
14 |
+ message: 'Blocks:', |
|
15 |
+ choices: [{ |
|
16 |
+ name: '<template>', |
|
17 |
+ value: 'template', |
|
18 |
+ checked: true |
|
19 |
+ }, |
|
20 |
+ { |
|
21 |
+ name: '<script>', |
|
22 |
+ value: 'script', |
|
23 |
+ checked: true |
|
24 |
+ }, |
|
25 |
+ { |
|
26 |
+ name: 'style', |
|
27 |
+ value: 'style', |
|
28 |
+ checked: true |
|
29 |
+ } |
|
30 |
+ ], |
|
31 |
+ validate(value) { |
|
32 |
+ if (value.indexOf('script') === -1 && value.indexOf('template') === -1) { |
|
33 |
+ return 'Components require at least a <script> or <template> tag.' |
|
34 |
+ } |
|
35 |
+ return true |
|
36 |
+ } |
|
37 |
+ } |
|
38 |
+ ], |
|
39 |
+ actions: data => { |
|
40 |
+ const name = '{{properCase name}}' |
|
41 |
+ const actions = [{ |
|
42 |
+ type: 'add', |
|
43 |
+ path: `src/components/${name}/index.vue`, |
|
44 |
+ templateFile: 'plop-templates/component/index.hbs', |
|
45 |
+ data: { |
|
46 |
+ name: name, |
|
47 |
+ template: data.blocks.includes('template'), |
|
48 |
+ script: data.blocks.includes('script'), |
|
49 |
+ style: data.blocks.includes('style') |
|
50 |
+ } |
|
51 |
+ }] |
|
52 |
+ |
|
53 |
+ return actions |
|
54 |
+ } |
|
55 |
+} |
@@ -0,0 +1,16 @@ |
||
1 |
+{{#if state}} |
|
2 |
+const state = {} |
|
3 |
+{{/if}} |
|
4 |
+ |
|
5 |
+{{#if mutations}} |
|
6 |
+const mutations = {} |
|
7 |
+{{/if}} |
|
8 |
+ |
|
9 |
+{{#if actions}} |
|
10 |
+const actions = {} |
|
11 |
+{{/if}} |
|
12 |
+ |
|
13 |
+export default { |
|
14 |
+ namespaced: true, |
|
15 |
+ {{options}} |
|
16 |
+} |
@@ -0,0 +1,62 @@ |
||
1 |
+const { notEmpty } = require('../utils.js') |
|
2 |
+ |
|
3 |
+module.exports = { |
|
4 |
+ description: 'generate store', |
|
5 |
+ prompts: [{ |
|
6 |
+ type: 'input', |
|
7 |
+ name: 'name', |
|
8 |
+ message: 'store name please', |
|
9 |
+ validate: notEmpty('name') |
|
10 |
+ }, |
|
11 |
+ { |
|
12 |
+ type: 'checkbox', |
|
13 |
+ name: 'blocks', |
|
14 |
+ message: 'Blocks:', |
|
15 |
+ choices: [{ |
|
16 |
+ name: 'state', |
|
17 |
+ value: 'state', |
|
18 |
+ checked: true |
|
19 |
+ }, |
|
20 |
+ { |
|
21 |
+ name: 'mutations', |
|
22 |
+ value: 'mutations', |
|
23 |
+ checked: true |
|
24 |
+ }, |
|
25 |
+ { |
|
26 |
+ name: 'actions', |
|
27 |
+ value: 'actions', |
|
28 |
+ checked: true |
|
29 |
+ } |
|
30 |
+ ], |
|
31 |
+ validate(value) { |
|
32 |
+ if (!value.includes('state') || !value.includes('mutations')) { |
|
33 |
+ return 'store require at least state and mutations' |
|
34 |
+ } |
|
35 |
+ return true |
|
36 |
+ } |
|
37 |
+ } |
|
38 |
+ ], |
|
39 |
+ actions(data) { |
|
40 |
+ const name = '{{name}}' |
|
41 |
+ const { blocks } = data |
|
42 |
+ const options = ['state', 'mutations'] |
|
43 |
+ const joinFlag = `, |
|
44 |
+ ` |
|
45 |
+ if (blocks.length === 3) { |
|
46 |
+ options.push('actions') |
|
47 |
+ } |
|
48 |
+ |
|
49 |
+ const actions = [{ |
|
50 |
+ type: 'add', |
|
51 |
+ path: `src/store/modules/${name}.js`, |
|
52 |
+ templateFile: 'plop-templates/store/index.hbs', |
|
53 |
+ data: { |
|
54 |
+ options: options.join(joinFlag), |
|
55 |
+ state: blocks.includes('state'), |
|
56 |
+ mutations: blocks.includes('mutations'), |
|
57 |
+ actions: blocks.includes('actions') |
|
58 |
+ } |
|
59 |
+ }] |
|
60 |
+ return actions |
|
61 |
+ } |
|
62 |
+} |
@@ -0,0 +1,9 @@ |
||
1 |
+exports.notEmpty = name => { |
|
2 |
+ return v => { |
|
3 |
+ if (!v || v.trim === '') { |
|
4 |
+ return `${name} is required` |
|
5 |
+ } else { |
|
6 |
+ return true |
|
7 |
+ } |
|
8 |
+ } |
|
9 |
+} |
@@ -0,0 +1,26 @@ |
||
1 |
+{{#if template}} |
|
2 |
+<template> |
|
3 |
+ <div /> |
|
4 |
+</template> |
|
5 |
+{{/if}} |
|
6 |
+ |
|
7 |
+{{#if script}} |
|
8 |
+<script> |
|
9 |
+export default { |
|
10 |
+ name: '{{ properCase name }}', |
|
11 |
+ props: {}, |
|
12 |
+ data() { |
|
13 |
+ return {} |
|
14 |
+ }, |
|
15 |
+ created() {}, |
|
16 |
+ mounted() {}, |
|
17 |
+ methods: {} |
|
18 |
+} |
|
19 |
+</script> |
|
20 |
+{{/if}} |
|
21 |
+ |
|
22 |
+{{#if style}} |
|
23 |
+<style lang="scss" scoped> |
|
24 |
+ |
|
25 |
+</style> |
|
26 |
+{{/if}} |
@@ -0,0 +1,55 @@ |
||
1 |
+const { notEmpty } = require('../utils.js') |
|
2 |
+ |
|
3 |
+module.exports = { |
|
4 |
+ description: 'generate a view', |
|
5 |
+ prompts: [{ |
|
6 |
+ type: 'input', |
|
7 |
+ name: 'name', |
|
8 |
+ message: 'view name please', |
|
9 |
+ validate: notEmpty('name') |
|
10 |
+ }, |
|
11 |
+ { |
|
12 |
+ type: 'checkbox', |
|
13 |
+ name: 'blocks', |
|
14 |
+ message: 'Blocks:', |
|
15 |
+ choices: [{ |
|
16 |
+ name: '<template>', |
|
17 |
+ value: 'template', |
|
18 |
+ checked: true |
|
19 |
+ }, |
|
20 |
+ { |
|
21 |
+ name: '<script>', |
|
22 |
+ value: 'script', |
|
23 |
+ checked: true |
|
24 |
+ }, |
|
25 |
+ { |
|
26 |
+ name: 'style', |
|
27 |
+ value: 'style', |
|
28 |
+ checked: true |
|
29 |
+ } |
|
30 |
+ ], |
|
31 |
+ validate(value) { |
|
32 |
+ if (value.indexOf('script') === -1 && value.indexOf('template') === -1) { |
|
33 |
+ return 'View require at least a <script> or <template> tag.' |
|
34 |
+ } |
|
35 |
+ return true |
|
36 |
+ } |
|
37 |
+ } |
|
38 |
+ ], |
|
39 |
+ actions: data => { |
|
40 |
+ const name = '{{name}}' |
|
41 |
+ const actions = [{ |
|
42 |
+ type: 'add', |
|
43 |
+ path: `src/views/${name}/index.vue`, |
|
44 |
+ templateFile: 'plop-templates/view/index.hbs', |
|
45 |
+ data: { |
|
46 |
+ name: name, |
|
47 |
+ template: data.blocks.includes('template'), |
|
48 |
+ script: data.blocks.includes('script'), |
|
49 |
+ style: data.blocks.includes('style') |
|
50 |
+ } |
|
51 |
+ }] |
|
52 |
+ |
|
53 |
+ return actions |
|
54 |
+ } |
|
55 |
+} |
@@ -0,0 +1,9 @@ |
||
1 |
+const viewGenerator = require('./plop-templates/view/prompt') |
|
2 |
+const componentGenerator = require('./plop-templates/component/prompt') |
|
3 |
+const storeGenerator = require('./plop-templates/store/prompt.js') |
|
4 |
+ |
|
5 |
+module.exports = function(plop) { |
|
6 |
+ plop.setGenerator('view', viewGenerator) |
|
7 |
+ plop.setGenerator('component', componentGenerator) |
|
8 |
+ plop.setGenerator('store', storeGenerator) |
|
9 |
+} |
@@ -0,0 +1,5 @@ |
||
1 |
+module.exports = { |
|
2 |
+ plugins: { |
|
3 |
+ autoprefixer: {} |
|
4 |
+ } |
|
5 |
+} |
@@ -0,0 +1,15 @@ |
||
1 |
+<!DOCTYPE html> |
|
2 |
+<html> |
|
3 |
+ <head> |
|
4 |
+ <meta charset="utf-8"> |
|
5 |
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
|
6 |
+ <meta name="renderer" content="webkit"> |
|
7 |
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> |
|
8 |
+ <link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
|
9 |
+ <title><%= webpackConfig.name %></title> |
|
10 |
+ </head> |
|
11 |
+ <body> |
|
12 |
+ <div id="app"></div> |
|
13 |
+ <!-- built files will be auto injected --> |
|
14 |
+ </body> |
|
15 |
+</html> |
@@ -0,0 +1,11 @@ |
||
1 |
+<template> |
|
2 |
+ <div id="app"> |
|
3 |
+ <router-view /> |
|
4 |
+ </div> |
|
5 |
+</template> |
|
6 |
+ |
|
7 |
+<script> |
|
8 |
+export default { |
|
9 |
+ name: 'App' |
|
10 |
+} |
|
11 |
+</script> |
@@ -0,0 +1,13 @@ |
||
1 |
+import request from '@/utils/request' |
|
2 |
+import store from '@/store' |
|
3 |
+import qs from 'qs' |
|
4 |
+ |
|
5 |
+export function fetchDashboard(data) { |
|
6 |
+ data['brand_id'] = 'ywkRTh5vtswRvhh8uLvTTQ' |
|
7 |
+ data['admin_id'] = store.getters.token |
|
8 |
+ return request({ |
|
9 |
+ url: '/admin/dashboard', |
|
10 |
+ method: 'post', |
|
11 |
+ data: qs.stringify(data) |
|
12 |
+ }) |
|
13 |
+} |
@@ -0,0 +1,21 @@ |
||
1 |
+import request from '@/utils/request' |
|
2 |
+import store from '@/store' |
|
3 |
+import qs from 'qs' |
|
4 |
+ |
|
5 |
+export function fetchList(data) { |
|
6 |
+ data['admin_id'] = store.getters.token |
|
7 |
+ return request({ |
|
8 |
+ url: '/admin/order/list', |
|
9 |
+ method: 'post', |
|
10 |
+ data: qs.stringify(data) |
|
11 |
+ }) |
|
12 |
+} |
|
13 |
+ |
|
14 |
+export function updateOrder(data) { |
|
15 |
+ data['admin_id'] = store.getters.token |
|
16 |
+ return request({ |
|
17 |
+ url: '/admin/order/update', |
|
18 |
+ method: 'post', |
|
19 |
+ data: qs.stringify(data) |
|
20 |
+ }) |
|
21 |
+} |
@@ -0,0 +1,25 @@ |
||
1 |
+import request from '@/utils/request' |
|
2 |
+import qs from 'qs' |
|
3 |
+ |
|
4 |
+export function login(data) { |
|
5 |
+ return request({ |
|
6 |
+ url: '/admin/login', |
|
7 |
+ method: 'post', |
|
8 |
+ data: qs.stringify(data) |
|
9 |
+ }) |
|
10 |
+} |
|
11 |
+ |
|
12 |
+export function getInfo(token) { |
|
13 |
+ return request({ |
|
14 |
+ url: '/vue-element-admin/user/info', |
|
15 |
+ method: 'get', |
|
16 |
+ params: { token } |
|
17 |
+ }) |
|
18 |
+} |
|
19 |
+ |
|
20 |
+export function logout() { |
|
21 |
+ return request({ |
|
22 |
+ url: '/vue-element-admin/user/logout', |
|
23 |
+ method: 'post' |
|
24 |
+ }) |
|
25 |
+} |
@@ -0,0 +1 @@ |